home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / comm / bbs_tee.zip / TEE.C < prev    next >
Text File  |  1987-06-10  |  2KB  |  123 lines

  1.  
  2. #include "stdio.h"
  3. #include "ctype.h"
  4. #include "dos.h"
  5.  
  6. /* #define LOCAL */
  7.  
  8. union REGS rrv,srv;
  9.  
  10.  
  11. main()
  12. {
  13.     int c;
  14.     
  15.     while(carrier()) {
  16.         c=fgetc(stdin);
  17.         if(c==EOF)
  18.             exit(0);
  19.         putchr(c);
  20.         c=getchr();
  21.         if(c==19)
  22.             wtchr();
  23.         if(c==3 || c==24 || c==11)
  24.             exit(1);
  25.     }
  26.     exit(2);
  27. }
  28.  
  29. /* send character c to modem and screen */
  30. putchr(c)
  31. {
  32.     fputc(c,stderr);
  33.     while(!moready() && carrier())
  34.         ;
  35.     mochar(c);
  36.     if(c=='\n') {
  37.         while(!moready() && carrier())
  38.             ;
  39.         mochar('\r');
  40.     }
  41. }
  42.  
  43.  
  44. getchr()
  45. {
  46.     int c;
  47.  
  48.     if(c=inkey())
  49.         return(c);
  50.     if(miready())
  51.         return(michar());
  52.     return(NULL);
  53. }
  54.  
  55.  
  56. /* wait for a character from console or modem */
  57. wtchr()
  58. {
  59.     int c;
  60.  
  61.     while((c=getchr())==NULL)
  62.         ;
  63.     return(c);
  64. }
  65.  
  66.  
  67. /* returns non 0 iff a modem character ready */
  68. miready()
  69. {
  70. #ifdef LOCAL
  71.     return(0);
  72. #endif
  73.  
  74.     srv.x.ax = 0x0300;
  75.     int86(0x14, &srv, &rrv);
  76.     return (rrv.x.ax & 0x100);
  77. }
  78.  
  79. /* input a character from modem assuming miready returns 1 */
  80. michar()
  81. {
  82.     srv.x.ax = 0x0200;
  83.     int86(0x14, &srv, &rrv);
  84.     return (rrv.x.ax & 0xff);
  85. }
  86.  
  87. carrier()        /* only tests COM1 -- change 0x3fe to 0x2fe for COM2 */
  88. {
  89. #ifdef LOCAL
  90.     return(TRUE);
  91. #endif
  92.  
  93.     if((inp(0x3fe)&0x80)!=0x80)
  94.         exit(1);
  95.     return(TRUE);
  96. }
  97.  
  98.  
  99. /* Returns non 0 iff modem is ready to send a character */
  100. moready()
  101. {
  102. #ifdef LOCAL
  103.     return(1);
  104. #endif
  105.  
  106.     srv.x.ax = 0x0300;
  107.     int86(0x14, &srv, &rrv);
  108.     return (rrv.x.ax & 0x2000);
  109. }
  110.  
  111. /* sends c to the modem */
  112. mochar(c)
  113. {
  114. /*
  115. #ifdef LOCAL
  116.     return;
  117. #endif
  118. */
  119.     srv.x.ax = 0x0100 | (c & 0xff);
  120.     int86(0x14, &srv, &rrv);
  121. }
  122.  
  123.